package agb.Modelo;
import java.util.*;

public class QSort {
    
    private int col=1;
    
    public QSort(){
    }
    
    void QuickSort(ArrayList a, int lo0, int hi0, int opOrd){
        int lo = lo0;
        int hi = hi0;
        int mid;
        int index=-1;
        ArrayList dato=null;
        if ( hi0 > lo0){
            index=(int)((lo0+hi0 )/2);
            dato=(ArrayList)a.get(index);
            mid = Integer.parseInt(dato.get(col).toString());
            while( lo <= hi ){
                switch(opOrd){
                    case 1://Ordena de menor a mayor
                        while( ( lo < hi0 ) && ( Integer.parseInt(((ArrayList)a.get(lo)).get(col).toString()) < mid ))
                            ++lo;
                        while( ( hi > lo0 ) && ( Integer.parseInt(((ArrayList)a.get(hi)).get(col).toString()) > mid ))
                            --hi;
                    break;
                    case 2://Ordena de Mayor a menor
                        while( ( lo < hi0 ) && ( Integer.parseInt(((ArrayList)a.get(lo)).get(col).toString()) > mid ))
                            ++lo;
                        while( ( hi > lo0 ) && ( Integer.parseInt(((ArrayList)a.get(hi)).get(col).toString()) < mid ))
                            --hi;
                    break;
                }
                if( lo <= hi ){
                    swap(a, lo, hi);
                    ++lo;
                    --hi;
                }
            }
            if( lo0 < hi ) QuickSort( a, lo0, hi, opOrd );
            if( lo < hi0 ) QuickSort( a, lo, hi0, opOrd );
        }
    }

    private void swap(ArrayList lista, int i, int j){
        ArrayList T=null;
        T=(ArrayList)lista.get(i); //T = a[i];
        lista.set(i,lista.get(j)); //a[i] = a[j];
        lista.set(j,T);            //a[j] = T;
    }

    public void setOrdenarAsc(ArrayList lista){
        QuickSort(lista, 0, lista.size() - 1, 1);
    }
    
    public void setOrdenarDesc(ArrayList lista){
        QuickSort(lista, 0, lista.size() - 1, 2);
    }
    
    public void setColumna(int columna){
        col=columna;
    }
}